bitkeeper revision 1.1415 (42887ada_Jmkta2rYHnpJBE2EVpy4w)
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Mon, 16 May 2005 10:50:02 +0000 (10:50 +0000)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Mon, 16 May 2005 10:50:02 +0000 (10:50 +0000)
Remove generic 'fast trap' from the Xen public interfaces. Internally
within Xen, we automatically set up direct trap for int 0x80, which is
the only 'fast trap' vector that we ever supported anyway.
Signed-off-by: Keir Fraser <keir@xensource.com>
25 files changed:
docs/src/interface.tex
extras/mini-os/h/hypervisor.h
freebsd-5.3-xen-sparse/i386-xen/i386-xen/machdep.c
freebsd-5.3-xen-sparse/i386-xen/i386-xen/mp_machdep.c
freebsd-5.3-xen-sparse/i386-xen/include/hypervisor.h
linux-2.4.29-xen-sparse/arch/xen/kernel/traps.c
linux-2.6.11-xen-sparse/arch/xen/i386/kernel/smpboot.c
linux-2.6.11-xen-sparse/arch/xen/i386/kernel/traps.c
linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/hypercall.h
linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/hypercall.h
netbsd-2.0-xen-sparse/sys/arch/xen/include/hypervisor.h
tools/libxc/xc_linux_build.c
tools/libxc/xc_linux_restore.c
tools/libxc/xc_plan9_build.c
tools/libxc/xc_vmx_build.c
xen/arch/x86/dom0_ops.c
xen/arch/x86/domain.c
xen/arch/x86/traps.c
xen/arch/x86/x86_32/entry.S
xen/arch/x86/x86_32/traps.c
xen/include/asm-x86/domain.h
xen/include/asm-x86/processor.h
xen/include/public/arch-x86_32.h
xen/include/public/dom0_ops.h
xen/include/public/xen.h

index f06313a20ccb87a028250bcead6d2cfd07dbd781..1f2ee724707c63e2120b5bd31a2b424429dcbb1c 100644 (file)
@@ -721,24 +721,6 @@ stack-frame layout is used.
 
 \end{quote} 
 
-Finally, as an optimization it is possible for each guest OS 
-to install one ``fast trap'': this is a trap gate which will 
-allow direct transfer of control from ring 3 into ring 1 without
-indirecting via Xen. In most cases this is suitable for use by 
-the guest OS system call mechanism, although it may be used for
-any purpose. 
-
-
-\begin{quote}
-\hypercall{set\_fast\_trap(int idx)}
-
-Install the handler for exception vector {\tt idx} as the ``fast
-trap'' for this domain. Note that this installs the current handler 
-(i.e. that which has been installed more recently via a call 
-to {\tt set\_trap\_table()}). 
-
-\end{quote}
-
 
 
 \section{Scheduling and Timer}
index e3642537571652b5f96d4ea5fb5276031434b8ca..c167850d55513fdaf0c4567a23903302dfccb744 100644 (file)
@@ -257,17 +257,6 @@ static __inline__ int HYPERVISOR_update_descriptor(
     return ret;
 }
 
-static __inline__ int HYPERVISOR_set_fast_trap(int idx)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_set_fast_trap), 
-        _a1 (idx) : "memory" );
-
-    return ret;
-}
-
 static __inline__ int HYPERVISOR_dom_mem_op(void *dom_mem_op)
 {
     int ret;
index 2343e634091cbdff28accc3f82ff9eab03ec28f6..efda2eac13bf73e4c0172f3aec95ebc697b378b8 100644 (file)
@@ -1642,9 +1642,6 @@ init386(void)
        if ((error = HYPERVISOR_set_trap_table(trap_table)) != 0) {
                panic("set_trap_table failed - error %d\n", error);
        }
-       if ((error = HYPERVISOR_set_fast_trap(0x80)) != 0) {
-               panic("set_fast_trap failed - error %d\n", error);
-       }
         HYPERVISOR_set_callbacks(GSEL(GCODE_SEL, SEL_KPL), (unsigned long)Xhypervisor_callback,
                                 GSEL(GCODE_SEL, SEL_KPL), (unsigned long)failsafe_callback);
 
index 64f42259e86faa7907528213de1dd70ab42c5065..5ef412ac212aea05e416d45efcf00663820c4bf1 100644 (file)
@@ -885,10 +885,9 @@ install_ap_tramp(void)
 }
 #endif
 
-static int 
+static void
 cpu_mp_trap_init(trap_info_t *trap_ctxt)
 {
-
         trap_info_t *t = trap_table;
 
         for (t = trap_table; t->address; t++) {
@@ -896,7 +895,6 @@ cpu_mp_trap_init(trap_info_t *trap_ctxt)
                 trap_ctxt[t->vector].cs = t->cs;
                 trap_ctxt[t->vector].address = t->address;
         }
-        return 0x80 /*SYSCALL_VECTOR*/;
 }
 
 /*
@@ -961,7 +959,7 @@ start_ap(int apic_id)
                ctxt.trap_ctxt[i].vector = i;
                ctxt.trap_ctxt[i].cs     = FLAT_KERNEL_CS;
        }
-       ctxt.fast_trap_idx = cpu_mp_trap_init(ctxt.trap_ctxt);
+       cpu_mp_trap_init(ctxt.trap_ctxt);
 
        /* No LDT. */
        ctxt.ldt_ents = 0;
index 824ca96cee331f0605568425e57a2a55046711a6..0a290cef19b05e87ebd1ddad420668c91235ae27 100644 (file)
@@ -283,18 +283,6 @@ HYPERVISOR_update_descriptor(
     return ret;
 }
 
-static inline int 
-HYPERVISOR_set_fast_trap(int idx)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_set_fast_trap), 
-        "b" (idx) : "memory" );
-
-    return ret;
-}
-
 static inline int 
 HYPERVISOR_dom_mem_op(unsigned int   op,
                      unsigned long *pages,
index dc9220dfe07644798e4512feefaf3d55747e97f8..b87fc3804c4f0ced2d3ea2d8d5438f21e25173ca 100644 (file)
@@ -605,7 +605,6 @@ static trap_info_t trap_table[] = {
 void __init trap_init(void)
 {
     HYPERVISOR_set_trap_table(trap_table);    
-    HYPERVISOR_set_fast_trap(SYSCALL_VECTOR);
 
     /*
      * The default LDT is a single-entry callgate to lcall7 for iBCS and a
index c1ca5c5c0e6bbcb877deedd16a79a17e7523373a..9a158e290083e3a3428162af7d222ca1e4b6bd2e 100644 (file)
@@ -821,7 +821,7 @@ static int __init do_boot_cpu(int apicid)
        extern void startup_32_smp(void);
        extern void hypervisor_callback(void);
        extern void failsafe_callback(void);
-       extern int smp_trap_init(trap_info_t *);
+       extern void smp_trap_init(trap_info_t *);
        int i;
 
        cpu = ++cpucount;
@@ -881,7 +881,7 @@ static int __init do_boot_cpu(int apicid)
                ctxt.trap_ctxt[i].vector = i;
                ctxt.trap_ctxt[i].cs     = FLAT_KERNEL_CS;
        }
-       ctxt.fast_trap_idx = smp_trap_init(ctxt.trap_ctxt);
+       smp_trap_init(ctxt.trap_ctxt);
 
        /* No LDT. */
        ctxt.ldt_ents = 0;
index d0718b5299d64596e3aeb9e9db7b21eb3a97bc3a..539c1d5b7d1834e3c6dd4c33167ab2454a484c74 100644 (file)
@@ -957,7 +957,6 @@ static trap_info_t trap_table[] = {
 void __init trap_init(void)
 {
        HYPERVISOR_set_trap_table(trap_table);
-       HYPERVISOR_set_fast_trap(SYSCALL_VECTOR);
 
        /*
         * default LDT is a single-entry callgate to lcall7 for iBCS
@@ -971,7 +970,7 @@ void __init trap_init(void)
        cpu_init();
 }
 
-int smp_trap_init(trap_info_t *trap_ctxt)
+void smp_trap_init(trap_info_t *trap_ctxt)
 {
        trap_info_t *t = trap_table;
 
@@ -980,5 +979,4 @@ int smp_trap_init(trap_info_t *trap_ctxt)
                trap_ctxt[t->vector].cs = t->cs;
                trap_ctxt[t->vector].address = t->address;
        }
-       return SYSCALL_VECTOR;
 }
index 187d44f87460e6ea07a6d0fb7493f3f7e57c8484..13ab9c3fde84d9df44e2522e9921c41c7611589a 100644 (file)
@@ -331,22 +331,6 @@ HYPERVISOR_update_descriptor(
     return ret;
 }
 
-static inline int
-HYPERVISOR_set_fast_trap(
-    int idx)
-{
-    int ret;
-    unsigned long ign;
-
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret), "=b" (ign)
-       : "0" (__HYPERVISOR_set_fast_trap), "1" (idx)
-       : "memory" );
-
-    return ret;
-}
-
 static inline int
 HYPERVISOR_dom_mem_op(
     unsigned int op, unsigned long *extent_list,
index 2bfb9e7262c0bfc745487521a0309cc7e95a613d..e57c54769a34f83c42b96cd8dcbf9b54c2c570f5 100644 (file)
@@ -309,21 +309,6 @@ HYPERVISOR_update_descriptor(
     return ret;
 }
 
-static inline int
-HYPERVISOR_set_fast_trap(
-    int idx)
-{
-    int ret;
-
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret)
-       : "0" ((unsigned long)__HYPERVISOR_set_fast_trap), "D" ((unsigned long)idx)
-       : __syscall_clobber );
-
-    return ret;
-}
-
 static inline int
 HYPERVISOR_dom_mem_op(
     unsigned int op, unsigned long *extent_list,
index d01af8034a486c886a33c44d4b0cae183e333a97..683f9640ceea6584fe634215ee688b05ac71837b 100644 (file)
@@ -353,21 +353,6 @@ HYPERVISOR_update_descriptor(unsigned long pa, unsigned long word1,
     return ret;
 }
 
-static inline int
-HYPERVISOR_set_fast_trap(int idx)
-{
-    int ret;
-    unsigned long ign1;
-
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret), "=b" (ign1)
-       : "0" (__HYPERVISOR_set_fast_trap), "1" (idx)
-       : "memory" );
-
-    return ret;
-}
-
 static inline int
 HYPERVISOR_dom_mem_op(unsigned int op, unsigned long *extent_list,
     unsigned long nr_extents, unsigned int extent_order)
index 84e99e9457f4a8d06dee9674dfdac73e1cebaa32..bf92bc749d3ec8d8afefcd300841320a301673f4 100644 (file)
@@ -426,10 +426,6 @@ int xc_linux_build(int xc_handle,
         ctxt->trap_ctxt[i].cs     = FLAT_KERNEL_CS;
     }
 
-#if defined(__i386__)
-    ctxt->fast_trap_idx = 0;
-#endif
-
     /* No LDT. */
     ctxt->ldt_ents = 0;
     
index 5374ffd3a54839e83d15a59d05854ef6a134b4de..0d05d0f90345512570881ca95be0c0b2b7b2dd27 100644 (file)
@@ -600,13 +600,12 @@ int xc_linux_restore(int xc_handle, XcIOContext *ioctxt)
      *  1. user_regs is fine, as Xen checks that on context switch.
      *  2. fpu_ctxt is fine, as it can't hurt Xen.
      *  3. trap_ctxt needs the code selectors checked.
-     *  4. fast_trap_idx is checked by Xen.
-     *  5. ldt base must be page-aligned, no more than 8192 ents, ...
-     *  6. gdt already done, and further checking is done by Xen.
-     *  7. check that kernel_ss is safe.
-     *  8. pt_base is already done.
-     *  9. debugregs are checked by Xen.
-     *  10. callback code selectors need checking.
+     *  4. ldt base must be page-aligned, no more than 8192 ents, ...
+     *  5. gdt already done, and further checking is done by Xen.
+     *  6. check that kernel_ss is safe.
+     *  7. pt_base is already done.
+     *  8. debugregs are checked by Xen.
+     *  9. callback code selectors need checking.
      */
     for ( i = 0; i < 256; i++ )
     {
index bfa5ccdf33fb1f074b728694af2062b530a2d502..08ac06d08a6a9bfe04381d8cc09d84d02470ae45 100644 (file)
@@ -510,10 +510,6 @@ xc_plan9_build(int xc_handle,
                ctxt->trap_ctxt[i].cs = FLAT_KERNEL_CS;
        }
 
-#if defined(__i386__)
-       ctxt->fast_trap_idx = 0;
-#endif
-
        /* No LDT. */
        ctxt->ldt_ents = 0;
 
index 1edb8dc9977ca3be2129375c43d2b2373d1c9011..31319db21a01925610639c4a9b0eb276a50f1e58 100644 (file)
@@ -591,10 +591,6 @@ int xc_vmx_build(int xc_handle,
         ctxt->trap_ctxt[i].cs     = FLAT_KERNEL_CS;
     }
 
-#if defined(__i386__)
-    ctxt->fast_trap_idx = 0;
-#endif
-
     /* No LDT. */
     ctxt->ldt_ents = 0;
     
index 171cb3b8a64f2d49c1f55edc167fd0028ea7b525..fb4bd53338788779f3bfc66d7844a85dcb418029 100644 (file)
@@ -406,12 +406,6 @@ void arch_getdomaininfo_ctxt(
         c->flags |= VGCF_VMX_GUEST;
 #endif
 
-#ifdef ARCH_HAS_FAST_TRAP
-    if ( (ed->arch.fast_trap_desc.a == 0) &&
-         (ed->arch.fast_trap_desc.b == 0) )
-        c->fast_trap_idx = 0;
-#endif
-
     c->gdt_ents = 0;
     if ( GET_GDT_ADDRESS(ed) == GDT_VIRT_START(ed) )
     {
index 6e69cf32cd804a697227a45348165e8b52bb3364..34c79ce68ab2abc64cecb6193b7100c24924fe44 100644 (file)
@@ -242,8 +242,6 @@ void arch_do_createdomain(struct exec_domain *ed)
 {
     struct domain *d = ed->domain;
 
-    SET_DEFAULT_FAST_TRAP(&ed->arch);
-
     ed->arch.flags = TF_kernel_mode;
 
     if ( d->domain_id != IDLE_DOMAIN_ID )
@@ -422,9 +420,6 @@ int arch_set_info_guest(
     if ( test_bit(_VCPUF_initialised, &ed->vcpu_flags) )
         return 0;
 
-    if ( (rc = (int)set_fast_trap(ed, c->fast_trap_idx)) != 0 )
-        return rc;
-
     memset(ed->arch.guest_context.debugreg, 0,
            sizeof(ed->arch.guest_context.debugreg));
     for ( i = 0; i < 8; i++ )
@@ -726,7 +721,6 @@ static void __context_switch(void)
                stack_regs, 
                CTXT_SWITCH_STACK_BYTES);
         unlazy_fpu(p);
-        CLEAR_FAST_TRAP(&p->arch);
         save_segments(p);
     }
 
@@ -750,7 +744,7 @@ static void __context_switch(void)
 
         if ( !VMX_DOMAIN(n) )
         {
-            SET_FAST_TRAP(&n->arch);
+            set_int80_direct_trap(n);
             switch_kernel_stack(n, cpu);
         }
     }
index d68539df88b391e18f5d433551e683cc72bb3af0..6e2c2ef163bfa90c86655d4a4095dfb09a3a108a 100644 (file)
@@ -1176,7 +1176,11 @@ long do_set_trap_table(trap_info_t *traps)
             break;
         }
 
-        memcpy(dst+cur.vector, &cur, sizeof(cur));
+        memcpy(&dst[cur.vector], &cur, sizeof(cur));
+
+        if ( cur.vector == 0x80 )
+            init_int80_direct_trap(current);
+
         traps++;
     }
 
index 032344d161ec7a5b8989436b7ddcea7ca96ff389..7737904a15ddb8fb2f7416fa65b6113240ba1144 100644 (file)
@@ -729,7 +729,7 @@ ENTRY(hypercall_table)
         .long do_set_debugreg
         .long do_get_debugreg
         .long do_update_descriptor  /* 10 */
-        .long do_set_fast_trap
+        .long do_ni_hypercall
         .long do_dom_mem_op
         .long do_multicall
         .long do_update_va_mapping
index 4d7c94e1b9de21496e8ccf65780792134eeb947b..a75badbad75a36ce07840272281f39e5fc52d51c 100644 (file)
@@ -12,7 +12,7 @@
 #include <asm/vmx.h>
 #endif
 
-/* All CPUs have their own IDT to allow set_fast_trap(). */
+/* All CPUs have their own IDT to allow int80 direct trap. */
 idt_entry_t *idt_tables[NR_CPUS] = { 0 };
 
 void show_registers(struct cpu_user_regs *regs)
@@ -184,50 +184,23 @@ void __init percpu_traps_init(void)
     set_task_gate(TRAP_double_fault, __DOUBLEFAULT_TSS_ENTRY<<3);
 }
 
-long set_fast_trap(struct exec_domain *p, int idx)
+void init_int80_direct_trap(struct exec_domain *ed)
 {
-    trap_info_t *ti;
-
-    /* Index 0 is special: it disables fast traps. */
-    if ( idx == 0 )
-    {
-        if ( p == current )
-            CLEAR_FAST_TRAP(&p->arch);
-        SET_DEFAULT_FAST_TRAP(&p->arch);
-        return 0;
-    }
-
-    /* We only fast-trap vector 0x80 (used by Linux and the BSD variants). */
-    if ( idx != 0x80 )
-        return -1;
-
-    ti = &p->arch.guest_context.trap_ctxt[idx];
+    trap_info_t *ti = &ed->arch.guest_context.trap_ctxt[0x80];
 
     /*
      * We can't virtualise interrupt gates, as there's no way to get
      * the CPU to automatically clear the events_mask variable.
      */
     if ( TI_GET_IF(ti) )
-        return -1;
-
-    if ( p == current )
-        CLEAR_FAST_TRAP(&p->arch);
-
-    p->arch.guest_context.fast_trap_idx = idx;
-    p->arch.fast_trap_desc.a = (ti->cs << 16) | (ti->address & 0xffff);
-    p->arch.fast_trap_desc.b = 
-        (ti->address & 0xffff0000) | 0x8f00 | (TI_GET_DPL(ti)&3)<<13;
-
-    if ( p == current )
-        SET_FAST_TRAP(&p->arch);
-
-    return 0;
-}
+        return;
 
+    ed->arch.int80_desc.a = (ti->cs << 16) | (ti->address & 0xffff);
+    ed->arch.int80_desc.b =
+        (ti->address & 0xffff0000) | 0x8f00 | ((TI_GET_DPL(ti) & 3) << 13);
 
-long do_set_fast_trap(int idx)
-{
-    return set_fast_trap(current, idx);
+    if ( ed == current )
+        set_int80_direct_trap(ed);
 }
 
 long do_set_callbacks(unsigned long event_selector,
index 86c806d2fd69961321eaf3cd1058f964bbc4b1ea..79eda33a07452eadc0b2f864efc61123d3d635a6 100644 (file)
@@ -17,7 +17,7 @@ struct trap_bounce {
 struct arch_domain
 {
     l1_pgentry_t *mm_perdomain_pt;
-#ifdef __x86_64__
+#ifdef CONFIG_X86_64
     l2_pgentry_t *mm_perdomain_l2;
     l3_pgentry_t *mm_perdomain_l3;
 #endif
@@ -82,9 +82,8 @@ struct arch_exec_domain
     int iobmp_limit;  /* Number of ports represented in the bitmap.  */
     int iopl;         /* Current IOPL for this VCPU. */
 
-    /* Trap info. */
-#ifdef ARCH_HAS_FAST_TRAP
-    struct desc_struct fast_trap_desc;
+#ifdef CONFIG_X86_32
+    struct desc_struct int80_desc;
 #endif
 
     /* Virtual Machine Extensions */
@@ -106,7 +105,7 @@ struct arch_exec_domain
     l2_pgentry_t *monitor_vtable;              /* virtual address of monitor_table */
     l1_pgentry_t *hl2_vtable;                  /* virtual address of hl2_table */
 
-#ifdef __x86_64__
+#ifdef CONFIG_X86_64
     l3_pgentry_t *guest_vl3table;
     l4_pgentry_t *guest_vl4table;
 #endif
index f5b628fb58385c1e3291aebdfedb46bf930cfd09..9ccfcf3f3ae4d1c2cf30e20db4807a7fe38e112c 100644 (file)
@@ -374,31 +374,17 @@ extern idt_entry_t *idt_tables[];
 
 extern struct tss_struct init_tss[NR_CPUS];
 
-#ifdef ARCH_HAS_FAST_TRAP
+#ifdef CONFIG_X86_32
 
-#define SET_DEFAULT_FAST_TRAP(_p) \
-    (_p)->guest_context.fast_trap_idx = 0x30;   \
-    (_p)->fast_trap_desc.a = 0;   \
-    (_p)->fast_trap_desc.b = 0;
-
-#define CLEAR_FAST_TRAP(_p) \
-    (memset(idt_tables[smp_processor_id()] + \
-            (_p)->guest_context.fast_trap_idx, \
-            0, 8))
-
-#define SET_FAST_TRAP(_p)   \
-    (memcpy(idt_tables[smp_processor_id()] + \
-            (_p)->guest_context.fast_trap_idx, \
-            &((_p)->fast_trap_desc), 8))
-
-long set_fast_trap(struct exec_domain *p, int idx);
+extern void init_int80_direct_trap(struct exec_domain *ed);
+#define set_int80_direct_trap(_ed)                  \
+    (memcpy(idt_tables[(_ed)->processor] + 0x80,    \
+            &((_ed)->arch.int80_desc), 8))
 
 #else
 
-#define SET_DEFAULT_FAST_TRAP(_p) ((void)0)
-#define CLEAR_FAST_TRAP(_p)       ((void)0)
-#define SET_FAST_TRAP(_p)         ((void)0)
-#define set_fast_trap(_p, _i)     (0)
+#define init_int80_direct_trap(_ed) ((void)0)
+#define set_int80_direct_trap(_ed)  ((void)0)
 
 #endif
 
index 4dbbacea8f1a1d7a6ec1e1eacb685a7d74f5b721..8c57f7c7878282f704410ed82b50bf69b4c49992 100644 (file)
@@ -133,7 +133,6 @@ typedef struct vcpu_guest_context {
     struct { char x[512]; } fpu_ctxt        /* User-level FPU registers     */
     __attribute__((__aligned__(16)));       /* (needs 16-byte alignment)    */
     trap_info_t   trap_ctxt[256];           /* Virtual IDT                  */
-    unsigned int  fast_trap_idx;            /* "Fast trap" vector offset    */
     unsigned long ldt_base, ldt_ents;       /* LDT (linear address, # ents) */
     unsigned long gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) */
     unsigned long kernel_ss, kernel_sp;     /* Virtual TSS (only SS1/SP1)   */
@@ -154,8 +153,6 @@ typedef struct {
 typedef struct {
 } arch_vcpu_info_t;
 
-#define ARCH_HAS_FAST_TRAP
-
 #endif
 
 #endif
index 430244d220bf0a4005796017f8c91bd48cd4cfb5..76bd18e079ae18eb92ed2ff9eb8a17c54d08c2d1 100644 (file)
@@ -19,7 +19,7 @@
  * This makes sure that old versions of dom0 tools will stop working in a
  * well-defined way (rather than crashing the machine, for instance).
  */
-#define DOM0_INTERFACE_VERSION   0xAAAA1005
+#define DOM0_INTERFACE_VERSION   0xAAAA1006
 
 /************************************************************************/
 
index e3ba5e9b06ddac732d12f8eaa11f188bcaad4a7f..31f264aaeba7ea8829f3a9d61880618f95595782 100644 (file)
@@ -42,7 +42,6 @@
 #define __HYPERVISOR_set_debugreg          8
 #define __HYPERVISOR_get_debugreg          9
 #define __HYPERVISOR_update_descriptor    10
-#define __HYPERVISOR_set_fast_trap        11 /* x86/32 only */
 #define __HYPERVISOR_dom_mem_op           12
 #define __HYPERVISOR_multicall            13
 #define __HYPERVISOR_update_va_mapping    14